package com.av.client.util.sesion;

import java.util.EventListener;
import java.util.EventObject;

import javax.swing.event.EventListenerList;

import com.av.client.util.idioma.ManejadorIdiomas;
import com.av.client.util.sesion.SesionCreador.Sesion;

/**
 * Clase que controla la sesion activa de la aplicacion
 * 
 * @author Victor J Morales R
 * 
 */
public class AdministradorSesion {

	public static AdministradorSesion instance;

	private Sesion sesionActiva;

	protected EventListenerList listenerList = new EventListenerList();

	/**
	 * Clase creada para el manejo de eventos para el manejador de idiomas
	 * 
	 * @author Victor J Morales R
	 * 
	 */
	@SuppressWarnings("serial")
	public static class SesionEvent extends EventObject {
		public SesionEvent(Object source) {
			super(source);
		}
	}// SesionEvent

	/**
	 * Interfaz creada para el manejo de eventos del manejador de sesiones
	 * 
	 * @author Victor J Morales R
	 * 
	 */
	public static interface SesionEventListener extends EventListener {
		public void changedSesionEvent(SesionEvent evt);
	}// SesionEventListener

	public void addSesionEventListener(SesionEventListener listener) {
		listenerList.add(SesionEventListener.class, listener);
	}// addSesionEventListener

	public void removeIdiomaEventListener(SesionEventListener listener) {
		listenerList.remove(SesionEventListener.class, listener);
	}// removeIdiomaEventListener

	void fireSesionEvent(SesionEvent evt) {
		Object[] listeners = listenerList.getListenerList();
		// Each listener occupies two elements - the first is the listener class
		// and the second is the listener instance
		for (int i = 0; i < listeners.length; i += 2) {
			if (listeners[i] == SesionEventListener.class) {
				((SesionEventListener) listeners[i + 1])
						.changedSesionEvent(evt);
			}
		}
	}// fireSesionEvent

	public static AdministradorSesion getInstance() {
		if (instance == null) {
			instance = new AdministradorSesion();
		}
		return instance;
	}// getInstance

	private AdministradorSesion() {

	}// AdministradorSesion

	/**
	 * Obtiene la sesion activa de la aplicacion
	 * 
	 * @return
	 */
	public Sesion getSesionActiva() {
		return sesionActiva;
	}// getSesionActiva

	/**
	 * Asigna la sesion activa de la aplicacion
	 * 
	 * @param sesionActiva
	 */
	public void setSesionActiva(Sesion sesionActiva) {
		this.sesionActiva = sesionActiva;
		if (sesionActiva != null) {
			ManejadorIdiomas.getInstance().setIdioma(
					sesionActiva.getUsuario().getIdioma());
			fireSesionEvent(new SesionEvent(sesionActiva));
		}
	}// setSesionActiva

}// AdministradorSesion